package com.tbit.uqbike.service.business;

import com.github.pagehelper.PageInfo;
import com.tbit.uqbike.object.business.PageData;
import com.tbit.uqbike.object.pojo.AccountUser;
import com.tbit.uqbike.object.pojo.AccountUserBound;
import com.tbit.uqbike.object.pojo.AccountUserLastPos;
import com.tbit.uqbike.object.pojo.dto.AccountUserDTO;
import com.tbit.uqbike.object.pojo.vo.AccountUserLoginExportVO;
import com.tbit.uqbike.object.pojo.vo.BatchOperationMsgVO;
import com.tbit.uqbike.object.value.LoginInfo;
import com.tbit.common.entity.view.Result;

import java.util.List;
import java.util.Set;

/**
 * @author MyWin E-mail:335918956@qq.com
 * @version 1.0
 * @createTime 2020-01-03 16:28
 */
public interface AccountUserService {

//    PageData<List<AccountUser>> getAccountUserList(LoginInfo li, Integer accountId, Integer rowCount, Integer pageNO);

    void addAccountUser(LoginInfo li, Integer accountId, Integer subRoleType, AccountUser accountUser, String expireDate, List<Integer> regionIdList);

    void delAccountUser(LoginInfo li, Integer accountId, Integer accountUserId);

    void modAccountUser(LoginInfo li, AccountUser accountUser, List<Integer> regionIdList);

    /**
     * 获取区域所有运维人员
     */
    List<AccountUser> getByType(Integer accountId, Boolean falg);

    /**
     * 通过accountId和accountUserId获取
     */
    AccountUserBound getByUserId(Integer accountId, Integer accountUserId);

    String getAccountIdByPhone(Integer brandId, String phone, String name);

    /**
     * 根据类型获取区域旗下用户
     *
     * @param subRoleType
     * @return
     */
    List<AccountUser> getByUserType(Integer accountId, Integer subRoleType);

    AccountUser getAccountUserById(Integer accountUserId);

    PageData<List<AccountUserDTO>> getAccountUserLists(LoginInfo li, Integer accountId, Integer rowCount, Integer pageNO, String phone, String name);

    /**
     * 运维人员定位时间
     */
    List<AccountUserLastPos> getAccountUserPointTime(Integer accountId);

    /**
     * 查询当前登录用户所有下级绑定的登录账号
     *
     * @param accountId 账户id
     * @return 所有账户绑定账号
     */
    List<AccountUserLoginExportVO> queryAccountUserByAccountId(Integer accountId, Integer type);


    /**
     * 过期校验
     *
     * @return
     */
    void expireCheck(Integer accountUserId);

    /**
     * 重置过期校验
     *
     * @return
     */
    void resetExpireCheck(Integer accountUserId);

    /**
     * 更新用户密码
     *
     * @param token
     * @param accountUserId
     * @param password
     */
    void updatePassword(String token, Integer accountUserId, String password);

    /**
     * 批量修改账号角色
     *
     * @param phoneList   手机号
     * @param subRoleType 0:默认值 1:区域运维管理员 2:区域运维人员 6:区域客服 7:股东
     * @param accountId   品牌、加盟商、区域
     * @param roleLevel   1:品牌 2:加盟商 3:区域
     * @return result
     */
    Result<BatchOperationMsgVO<String>> batchUpdateUserRole(String phoneList, Integer subRoleType, Integer brandId, Integer accountId, Integer roleLevel);

    /**
     * 获取当前登录账号的直属上级账号
     *
     * @param accountId 区域id
     * @param loginInfo 登录信息
     * @return List
     */
    Result<Object> getParentsAccountUser(Integer accountId, LoginInfo loginInfo);

    /**
     * @description: 根据品牌id获取当前用户能看到的所有用户（管理员和品牌能看到该品牌下的所有用户，加盟商能看到加盟商级别和区域级别的用户，区域用户只能看到区域级别的用户）
     * @author: mo.shanyong
     * @date: 2025/2/26 15:52
     * @param: brandId 品牌id
     * @param: info 当前用户
     * @return: java.util.List<com.tbit.uqbike.object.pojo.AccountUser>
     */
    List<AccountUser> getAUserByBrandAndUser(Integer brandId, LoginInfo info);

    /**
     * 获取账号绑定列表
     *
     * @param loginInfo 登录信息
     * @param brandId 品牌id
     * @param subRoleType      1:品牌 2:加盟商 3:区域运营商
     * @param name      姓名
     * @param phone     手机号
     */
    PageInfo<AccountUserDTO> getAccountUserList(LoginInfo loginInfo, Integer brandId, Integer subRoleType, String phone,
                                                String name, Integer accountId, Integer pageNo, Integer pageSize);

    /**
     * @description: 根据B端用户id批量获取用户
     * @author: mo.shanyong
     * @date: 2025/4/10 9:04
     * @param: accountUserIdSet B端用户信息
     * @return: com.tbit.uqbike.object.pojo.AccountUser
     */
    List<AccountUser> getAccountUserByIds(Set<Integer> accountUserIdSet);

    /**
     * 根据角色id判断当前账号是否有权限查看角色绑定的账号
     *
     * @param roleId 品牌id
     */
    Boolean checkViewRoleAccountPermission(Integer roleId, LoginInfo loginInfo);
}
